#include #include struct EL {int info; struct EL *left, *right;}; typedef struct EL Tree; typedef Tree *Ptree; typedef enum {false, true} boolean; /*Scrivere una funzione ricorsiva che dato un Albero, conti tutte i * nodi che hanno associato un intero pari. */ int contanodi(Ptree tree){ int ris=0; if(tree!=NULL){ if(tree->info%2==0) ris++; ris+=contanodi(tree->left)+contanodi(tree->right); } return ris; } /*Scrivere una funzione ricorsiva che dato un Albero, conti tutte le foglie che hanno associato un intero pari. */ int contafoglie(Ptree tree){ int ris=0; if(tree!=NULL){ if(tree->left==NULL && tree->right==NULL){ if(tree->info%2==0){ ris++; } } ris+=contafoglie(tree->left)+contafoglie(tree->right); } return ris; } /* Dato un albero binario di interi, raddoppia l’etichetta di nodi con etichetta pari */ void raddoppiapari(Ptree albero){ if(albero!=NULL){ if(albero->info%2==0){ albero->info*=2; raddoppiapari(albero->left); raddoppiapari(albero->right); } } } void previsit(Ptree al){ if(al!=NULL){ printf("%d", al->info); previsit(al->left); previsit(al->right); } } void inorder(Ptree al){ if(al!=NULL){ inorder(al->left); printf("%d", al->info); inorder(al->right); } } void postvisit(Ptree al){ if(al!=NULL){ postvisit(al->right); postvisit(al->left); printf("%d", al->info); } } /* Scrivere una funzione che conta il numero di occorrenze di una certa etichetta in un albero binario.*/ int contaOccorrenze(Ptree albero, int val){ int ris=0; if(albero!=NULL){ if(albero->info==val){ ris++; ris+=contaOccorrenze(albero->left, val) +contaOccorrenze(albero->right, val); } } return ris; } /* Scrivere una funzione che determina se un albero contiene un nodo con una certa etichetta. */ boolean member(Ptree al, int val){ boolean condizione=false; if(al!=NULL){ if(al->info==val){ condizione=true; return condizione; } condizione=member(al->left, val); if(!condizione) condizione=member(al->right, val); } return condizione; } /* Per alberi binari con etichette di tipo int, scrivere una funzione che calcoli la somma delle etichette: - di tutti i nodi dell’albero - di tutte le foglie dell’albero */ int sommanodi(Ptree tree){ int ris=0; if(tree!=NULL){ ris+=tree->info; ris+=sommanodi(tree->left)+sommanodi(tree->right); } return ris; } int sommafoglie(Ptree tree){ int ris=0; if(tree!=NULL){ if(tree->left==NULL && tree->right==NULL){ ris+=tree->info; } ris+=sommafoglie(tree->left)+sommafoglie(tree->right); } return ris; } int main(){ //crea alberi e prova ... return 0; }